home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / KMAGV3.ZIP / ANIM.C next >
C/C++ Source or Header  |  1996-01-11  |  4KB  |  121 lines

  1. //ANIMEXAM.C  / EXAMPLE FOR SIMPLE ANIMATION //
  2. //WRITING BY THE KING IN 01/02/96            //
  3. #include "kmagunit.c"
  4. #include <alloc.h>
  5. #include <stdlib.h>
  6. //This is the IMAGE "HELLO" That I Type on the screen.
  7. const char Image[24*5] =
  8.                              {15,0,0,15,0,15,15,15,15,0,15,0,0,0,0,15,0,0,0,0,15,15,15,15,
  9.                               15,0,0,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
  10.                               15,15,15,15,0,15,15,15,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
  11.                               15,0,0,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
  12.                               15,0,0,15,0,15,15,15,15,0,15,15,15,15,0,15,15,15,15,0,15,15,15,15};
  13.  
  14.  
  15. unsigned char *virtualscreen;
  16. unsigned char *virtualscreen1;
  17.  
  18. //------------------------------------------------//
  19. //Put A Pixel On Any Kind Of Page.                //
  20. //------------------------------------------------//
  21.  
  22. void PutPixel1(int X,int Y,unsigned char Col,unsigned char *Where)
  23. {
  24.     asm {
  25.     LEs Di,Where
  26.     Mov Ax,Y             //Ax = Y
  27.     Mov Bx,Ax            //Bx = Y
  28.     Shl Ax,8             //Ax = Ax * 256
  29.     Shl Bx,6             //Bx = Bx * 64
  30.     Add Ax,Bx            //Ax = (256*64=320))
  31.     Add Ax,X             //Ax = Vline + Hline = Offset
  32.     Add Di,Ax            //Di = Offset
  33.     Mov Al,Col           //Al = Color
  34.     StoSb                //[0A000h:Offset] = Color
  35.     }
  36. }
  37.  
  38. void ShowVirtualScreen(unsigned char *VScreen)
  39. {
  40.     asm {
  41.     Push Ds                 //Saving Ds
  42.     lds si,VScreen
  43. //  Mov Ax,Word(VScreen+2)  //Ax = Segment Vscreen
  44. //  Mov Ds,Ax               //Ds = Ax
  45.     Mov Ax,0xA000           //Ax = Screen Segment
  46.     Mov Es,AX               //Es = Ax
  47.     Xor Di,Di               //Di = 0
  48. //  Xor Si,Si               //Si = 0
  49.     Mov Cx,32000            //Cx = 32000
  50.     Rep MovSw               //Move 32000*2 Bytes
  51.                             //From [Ds:Si],[Es:Di]
  52.     Pop Ds                  //Restore Ds
  53.     }
  54. }
  55.  
  56. //-----------------------------------//
  57. //            Flip Pages             //
  58. //-----------------------------------//
  59. void FlipScreens(unsigned char *Vfrom,unsigned char *Vto)
  60. {
  61.     asm {
  62.     Push Ds               //Save Ds
  63.     Lds si,Vfrom          //Ax = Segment Vfrom
  64.     Les di,Vto            //Ax = Segment Vto
  65.     Mov Cx,32000          //Cx = 32000
  66.     Rep MovSw             //Move 32000*2 Bytes
  67.                           //From [Ds:Si],[Es:Di]
  68.     Pop Ds                //Restore Ds
  69.     }
  70. }
  71.  
  72. //----------------//
  73. //Paint The BitMap//
  74. //----------------//
  75. void Paint_BitMap(int X,int Y)
  76. {
  77. char T,T1;
  78.     for(T=0;T<5;T++)    {
  79.         for(T1=0;T1<24;T1++)        {
  80.             if (Image[T*24+T1] != 0) {
  81.                 PutPixel1(X+T1,Y+T,Image[T*24+T1],virtualscreen);
  82.             }
  83.         }
  84.     }
  85. }
  86.  
  87. void main() {
  88.  
  89. int x,y;
  90. unsigned int t;
  91. int ran;
  92.  
  93.     virtualscreen = (char *)malloc(64000);
  94.     virtualscreen1 = (char *)malloc(64000);
  95.     randomize();
  96.     memset(virtualscreen,0,64000);
  97.     for(t=0;t<65000;t++)
  98.         PutPixel1(rand() % 320,rand() % 200,rand() % 255,virtualscreen);
  99.     FlipScreens(virtualscreen,virtualscreen1);
  100.     SetMode();
  101.     t = 0;
  102.     x = 160;
  103.     y = 100;
  104.     do  {
  105.         ran = (rand() % 3) - 1;
  106.         if (x + ran >= 320 - 24) ran = 0;
  107.         if (x + ran <= 0) ran = 0;
  108.         x = x + ran;
  109.         ran = (rand() % 3) - 1;
  110.         if (y + ran >= 200 - 5) ran = 0;
  111.         if (y + ran <= 0) ran = 0;
  112.         y = y + ran;
  113.  
  114.         Paint_BitMap(x,y);
  115.         ShowVirtualScreen(virtualscreen);
  116.        FlipScreens(virtualscreen1,virtualscreen);
  117.     } while (!kbhit());
  118.     free(virtualscreen);
  119.     free(virtualscreen1);
  120. }
  121.